package com.example.e_learn.Control;

import com.example.e_learn.Entity.Word;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class WordUtil {
    private static List<Word> words;//单词
    private static List<Word> faultwords;//错题个数
    private static int faultwordcounts;
    private static int wordcounts = 0;//单词的总个数
    private static int unitcounts;

    static {
        words = new ArrayList<>();
        faultwords = new ArrayList<>();
    }

//    public WordUtilt(Word[] words, int wordcounts) {
//        this.words = words;
//        this.wordcounts = wordcounts;
//    }

    //添加错误单词
    public static void addFaultWord(Word word) {
        if (faultwords.contains(word) == false){
            faultwords.add(word);
            faultwordcounts++;
        }

    }

    //获取错误单词
    public static List<Word> getAllFaultwords() {
        return faultwords;
    }

    //获取错题的数量
    public static int getFaultwordcounts() {
        return faultwordcounts;
    }

    //获取所有单词
    public static List<Word> getAllWords() {
        return words;
    }

    //获取单词总的数量
    public static int getWordcounts() {
        return wordcounts;
    }

    //获取单元总数
    public static int getUnitcounts() {
        return unitcounts;
    }

    //检查输入的解释是否正确
    public static boolean checkChinese(String x, int p) {
        int count = 0;//用于记录测试者回答的单词正确含义的个数，只有当回答对之后才能得分,对一个或多个都行
//        int flag = 0;//flag用于标记测试者回答的单词正确含义字符串中是否带有","
        String[] means = null;//means数组用于存储下标为p的chinese[p]或chinesefault[p]以","分隔的词义数组
        means = words.get(p).getChinese().split(",");
        int N = means.length;//N变量用于记录means数组的长度
        //字符串变量x用于记录用户在应答界面输入的字符串
//        if(x.indexOf(",") != -1)//若x字符串中有符号",",意味着用户输入了多个词义,则需判断用户输入的词义是否全部答对
//        {
//            flag = 1;
//            String str[] = x.split(",");//str数组用于存储字符串x以","分隔的词义数组
//            n = str.length;//整型变量n用于记录str数组的长度
//            for(int i = 0; i < n; i++){//在Str数组里检索是否存在与str数组匹配的词义
//                for(int j = 0; j < N; j++){
//                    if(str[i].equals(Str[j])){
//                        count++;//整型变量count用于记录匹配的词义个数
//                        break;
//                    }
//                }
//            }
//            if(count == N) return true;//若count与str数组长度相同,则说明用户回答正确,返回true
//        }
//        else{//若x字符串中没有符号",",意味着用户只输入了单个词义,则只需判断用户输入的唯一一个词义是否答对
        //循环与解释进行对比，只要有一个对就返回正确，如果始终找不到，最终返回失败
        for (int i = 0; i < N; i++) {
            if (x.equals(means[i])) {
                count++;
                return true;
            }
        }

        return false;
    }

    //获得随机下标
    public static int getRandomPos(int size) {
        return (int)(size*Math.random());
    }

    //从文件中读取单词
    public static void toLoading(InputStream in) {//词汇装载方法
        BufferedReader br = null;
        int begin = 0;
        int end = 0;
        String en;
        String cn;
        //字符读取缓冲
        try {
            br = new BufferedReader(new InputStreamReader(
                    in));
            //readLine 返回一个String的字符串，所以我们在这里设置
            String str1[] = new String[1000];
            //逐行读取数据，并按顺序赋值给数组中的每个元素
            for (String line = br.readLine(); line != null; line = br.readLine()) {
                //获取当前读到行的第一个"——"的索引
                end = line.indexOf("——");
                //根据破折号，"——"前面的为en单词，后面的为中文解释
                en = line.substring(begin, end);
                cn = line.substring(end + 1);
                //最后添加到单词列表
                words.add(new Word(en, cn));
                wordcounts++;
            }
            //单元总数
            unitcounts = (wordcounts/100) + 1;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
